"""
题目：给定单链表头节点和删除位置（从0开始），删除指定位置的节点，若位置无效则返回原链表，返回删除后的链表头节点。
"""


class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next


def delete_at_position(head, targetPos):
    """删除链表指定位置pos的节点，pos从0开始，位置无效则返回原链表"""
    # 步骤1：处理空链表或位置小于0的情况
    if not head or targetPos < 0:
        return head
    # 步骤2：处理位置为0的情况（删除头节点）
    if targetPos == 0:
        return head.next  # 头节点后移一位
    # 步骤3：遍历找到删除位置的前一个节点
    current = head
    current_pos = 0
    # 遍历到targetPos-1位置，或到链表末尾（current.next为None说明pos超出长度）
    while current.next and current_pos < targetPos - 1:
        current = current.next
        current_pos += 1
    # 步骤4：判断位置是否有效（current.next非空说明targetPos存在）
    if current.next:
        current.next = current.next.next
    return head


def create_linked_list(arr):
    if not arr:
        return None
    head = ListNode(arr[0])
    current = head
    for val in arr[1:]:
        current.next = ListNode(val)
        current = current.next
    return head


def traverse_linked_list(head):
    result = []
    current = head
    while current:
        result.append(current.val)
        current = current.next
    return result


# 测试
if __name__ == "__main__":
    # 测试1：删除中间节点（pos=1）
    head1 = create_linked_list([1, 2, 3, 4])
    new_head1 = delete_at_position(head1, 1)
    print(traverse_linked_list(new_head1))  # 输出: [1, 3, 4]

    # 测试2：删除末尾节点（pos=3，链表长度4）
    head2 = create_linked_list([1, 2, 3, 4])
    new_head2 = delete_at_position(head2, 3)
    print(traverse_linked_list(new_head2))  # 输出: [1, 2, 3]

    # 测试3：无效位置删除（pos=5，链表长度4）
    head3 = create_linked_list([1, 2, 3, 4])
    new_head3 = delete_at_position(head3, 5)
    print(traverse_linked_list(new_head3))  # 输出: [1, 2, 3, 4]